Allow tpmfront/tpmback to be built as modules.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 28 Feb 2006 18:00:15 +0000 (19:00 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 28 Feb 2006 18:00:15 +0000 (19:00 +0100)
From: Jan Beulich

Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.6-xen-sparse/drivers/xen/Kconfig
linux-2.6-xen-sparse/drivers/xen/tpmback/common.h
linux-2.6-xen-sparse/drivers/xen/tpmback/interface.c
linux-2.6-xen-sparse/drivers/xen/tpmback/tpmback.c
linux-2.6-xen-sparse/drivers/xen/tpmback/xenbus.c
linux-2.6-xen-sparse/drivers/xen/tpmfront/tpmfront.c

index 2cd2d937ead929355a1dd204dcb80a3b30d8eb11..7a6a569a57444a095f53ae79fa28ab0b99ae5629 100644 (file)
@@ -118,7 +118,7 @@ config XEN_NETDEV_LOOPBACK
          connection.
 
 config XEN_TPMDEV_BACKEND
-       bool "TPM-device backend driver"
+       tristate "TPM-device backend driver"
        default n
        help
          The TPM-device backend driver
@@ -162,7 +162,7 @@ config XEN_BLKDEV_TAP
          space.  Odds are that you want to say N here.
 
 config XEN_TPMDEV_FRONTEND
-       bool "TPM-device frontend driver"
+       tristate "TPM-device frontend driver"
        default n
        select TCG_TPM
        select TCG_XEN
index bcb01ac9da429d775b0da655500f309c2cda17f7..44a3d4c9e923b5dcc4f67cb8f49b4c75efcdc52b 100644 (file)
@@ -54,9 +54,11 @@ typedef struct tpmif_st {
 void tpmif_disconnect_complete(tpmif_t * tpmif);
 tpmif_t *tpmif_find(domid_t domid, long int instance);
 void tpmif_interface_init(void);
+void tpmif_interface_exit(void);
 void tpmif_schedule_work(tpmif_t * tpmif);
 void tpmif_deschedule_work(tpmif_t * tpmif);
 void tpmif_xenbus_init(void);
+void tpmif_xenbus_exit(void);
 int tpmif_map(tpmif_t *tpmif, unsigned long shared_page, unsigned int evtchn);
 irqreturn_t tpmif_be_int(int irq, void *dev_id, struct pt_regs *regs);
 int tpmif_vtpm_open(tpmif_t *tpmif, domid_t domain, u32 instance);
index eebe9c84aaed1427948c50073c019d52f3ec653b..28e8b49c438aa3e40fbae92aa952f0745368100d 100644 (file)
@@ -186,6 +186,12 @@ tpmif_interface_init(void)
                                         0, 0, NULL, NULL);
 }
 
+void __init
+tpmif_interface_exit(void)
+{
+       kmem_cache_destroy(tpmif_cachep);
+}
+
 /*
  * Local variables:
  *  c-file-style: "linux"
index 7b9570440e9ed09bfed0e41384d19e9b1d148490..d20542f6a2eea08f5a0d78c7fb748fd24f414130 100644 (file)
@@ -1092,7 +1092,20 @@ tpmback_init(void)
        return 0;
 }
 
-__initcall(tpmback_init);
+module_init(tpmback_init);
+
+static void __exit
+tpmback_exit(void)
+{
+
+       tpmif_xenbus_exit();
+       tpmif_interface_exit();
+       misc_deregister(&ibmvtpms_miscdevice);
+}
+
+module_exit(tpmback_exit);
+
+MODULE_LICENSE("Dual BSD/GPL");
 
 /*
  * Local variables:
index 556d23e8d38b907aee104088c6479c7dca1bfa7f..9a2be8d593a4d47b78cf5a61eb8093c13e332d81 100644 (file)
@@ -317,6 +317,11 @@ void tpmif_xenbus_init(void)
        xenbus_register_backend(&tpmback);
 }
 
+void tpmif_xenbus_exit(void)
+{
+       xenbus_unregister_driver(&tpmback);
+}
+
 /*
  * Local variables:
  *  c-file-style: "linux"
index 1d7b3413830dfff841d0ccde33df494e3cb02209..6f53299f424dfba13e3ce0a44c27dff6ff702482 100644 (file)
@@ -480,6 +480,11 @@ static void __init init_tpm_xenbus(void)
        xenbus_register_frontend(&tpmfront);
 }
 
+static void __exit exit_tpm_xenbus(void)
+{
+       xenbus_unregister_driver(&tpmfront);
+}
+
 
 static int
 tpm_allocate_buffers(struct tpm_private *tp)
@@ -700,7 +705,18 @@ tpmif_init(void)
        return 0;
 }
 
-__initcall(tpmif_init);
+module_init(tpmif_init);
+
+static void __exit
+tpmif_exit(void)
+{
+       exit_tpm_xenbus();
+       gnttab_free_grant_references(gref_head);
+}
+
+module_exit(tpmif_exit);
+
+MODULE_LICENSE("Dual BSD/GPL");
 
 /*
  * Local variables: